<?php

namespace app\common\model;

use think\facade\Db;

/**
 * 账户基本数据处理
 * 
 * 时间 ： 2020年4月9日16:29:57
 * 作者 ： 夏立军
 */
class PermissionsModel
{

    /**
     * 获取所有的权限信息
     */
    public function get_all_permissions()
    {
        return Db::name('permissions')->select();
    }

    /**
     * 获取所有权限的数量信息
     */
    public function get_permissions_count()
    {
        $user_count = Db::name('permissions')->count();
        return $user_count;
    }

    /**
     * 权限列表 分页显示
     * 
     * @param $offset 获取数据的开始位置
     * @param $size   获取数据的条数
     * @return 获取到的所有项目
     */
    public function permissions_list_page(int $offset, int $size = 10)
    {
        $user_list = Db::name('permissions')->alias('a')
            ->join(['ams_admin' => 'b'], 'a.aid=b.id')
            ->field('a.id,a.name,a.url,a.status,a.note,a.create_time,b.name as admin_name')
            ->limit($offset, $size)->select();
        return $user_list;
    }

    /**
     * 添加一个权限
     * @param $name 权限名称
     * @param $url 权限URL
     * @param $status 权限状态
     * @param $note 备注
     * @return 能否添加成功
     */
    public function permissions_add(int $aid, string $name, string $url, int $status, string $note)
    {
        $data['aid'] = $aid;
        $data['name'] = $name;
        $data['url'] = $url;
        $data['status'] = $status;
        $data['note'] = $note;
        $data['create_time'] = time();
        try {
            Db::name('permissions')->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 通过 ID 获取权限信息
     * @param $id 权限ID
     * @return 权限信息
     */
    public function get_permissions_info_by_id(int $id)
    {
        $permissions_info = Db::name('permissions')->where('id', $id)->find();
        return $permissions_info;
    }

    /**
     * 修改更新权限信息
     * @param $id 权限ID
     * @param $name 权限名称
     * @param $url 权限地址
     * @param $status 权限状态
     * @param $note 备注
     * @return 是否修改成功
     */
    public function set_permissions_info(int $id, string $name, string $url, int $status, string $note)
    {
        $data['name'] = $name;
        $data['url'] = $url;
        $data['status'] = $status;
        $data['note'] = $note;
        $data['update_time'] = time();

        try {
            Db::name('permissions')->where('id', $id)->save($data);
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 删除权限
     * @param $id 权限ID
     * @return 是否删除
     */
    public function permissions_del($id)
    {
        try {
            Db::name('permissions')->where('id', $id)->delete();
        } catch (\Throwable $th) {
            return false;
        }
        return true;
    }

    /**
     * 通过 URL 获取权限信息
     * @param $url 权限地址
     * @return 权限信息
     */
    public function get_permissions_info_by_url($url)
    {
        return Db::name('permissions')->where('url', $url)->find();
    }

    /**
     * 验证权限
     * @param $uid 用户ID
     * @param $pid 权限ID
     * @return 验证结果
     */
    public function validation_permissions_by_uid_and_pid(int $uid, int $pid)
    {
        $urp_res = Db::name('user_role')->alias('ur')
            ->join(['ams_role_permissions' => 'rp'], 'ur.rid=rp.rid')
            ->field('ur.uid,ur.rid,rp.pid')
            ->where('uid',$uid)
            ->where('pid',$pid)
            ->find();
        return $urp_res;
    }
}
